Data compression is used in communications and computer networking to store, transmit, and reproduce information efficiently. It finds particular application in the encoding of images, audio and video. Common image compression formats include JPEG, TIFF, and PNG. A newly-developed video coding standard is the ITU-T H.265/HEVC standard. Other video coding formats include the VP8 and VP9 formats developed by Google Inc. Evolutions to all of these standards and formats are under active development.
All of these image and video coding standards and formats are based on predictive coding that create a prediction of data to be coded, then encode the error (often called the residual) in the prediction for transmission to a decoder as a bitstream. The decoder then makes the same prediction and adjusts it by the reconstructed error decoded from the bitstream. The data compression of the error at the encoder often includes a spectral transform of the error to create blocks of transform domain coefficients. This is typically accompanied by lossy quantization. The reverse operations are performed at the decoder to reconstruct the error/residual. Entropy coding (often context-adaptive) is typically used to encode the residual data, plus side information for making the predictions (e.g. intra-coding mode or inter-coding motion vectors), to generate a bitstream for transmission from encoder to decoder or for storage on a storage medium for later decoding. In some cases, the error at the encoder is encoded without using a spectral transform and/or quantization.
In the case of inter-coding, i.e. motion compensation, the prediction is based on a block or portion of pixel data from a previously-reconstructed picture earlier in the coding order (usually a picture earlier in the display sequence of the video, but not necessarily). The encoder losslessly encodes information specifying the motion vector for building a prediction block, and the decoder decodes that information in order to identify the same prediction block. In some cases, the encoder and decoder both generate a motion vector predictor and the encoder searches within a search set of nearby motion vectors to identify, often based on rate-distortion optimization, a selected motion vector. The encoder then encodes the difference between the selected motion vector and the motion vector predictor.
It has been found that motion vector coding can occupy a large portion of the overall bit rate for encoding. In some cases, motion vector coding may make up 30% to 50% of the total bit rate for inter-coded pictures. Accordingly, it may be advantageous to find a more efficient way to encode motion vectors.
Similar reference numerals may have been used in different figures to denote similar components.